﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AccesoDatos;
using Entidades.Negocio;
using Entidades;
using System.Data.EntityClient;

namespace LogicaNegocios
{
    static public class TacsaLN
    {
        static public Tacsa agregarTacsa(this Tacsa tacsaview)
        {
            try
            {
                MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();
                TACSA tacsa = tacsaview.toTACSA();
                tacsa.CHRESTADO = Constantes.ESTADO_HABILITADO;
                contexto.TACSA.AddObject(tacsa);
                contexto.SaveChanges();
                return tacsa.toTacsa();
            }
            catch( Exception e)
            {
                throw e;
            }
        }

        static public void modificarTacsa(this Tacsa tacsaview)
        {
            MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();
            TACSA tacsa = contexto.TACSA.Where(t => t.INTCODTACSA == tacsaview.INTCODTACSA).FirstOrDefault();
            tacsa.INTCODTIPOTACSA = tacsaview.INTCODTIPOTACSA;
            tacsa.INTTACSA = tacsaview.INTTACSA;
            tacsa.INTTACA = tacsaview.INTTACA;
            tacsa.INTSEVERIDAD = tacsaview.INTSEVERIDAD;
            tacsa.DTMFECHA = Funciones.StringToDate(tacsaview.Fecha);
            tacsa.VCHUSUARIOMODIFICACION = tacsaview.VCHUSUARIOMODIFICACION;
            tacsa.VCHUSUARIOCREACION = tacsaview.VCHUSUARIOCREACION;
            tacsa.DTMFECHAMODIFICACION = DateTime.Now;
            tacsa.CHRESTADO = Constantes.ESTADO_HABILITADO;
            contexto.SaveChanges();
        }

        static public void eliminarTacsa(this Tacsa tacsaview)
        {
            MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();
            TACSA tacsa = contexto.TACSA.Where(t => t.INTCODTACSA == tacsaview.INTCODTACSA).FirstOrDefault();
            tacsa.CHRESTADO = Constantes.ESTADO_ELIMINADO;
            tacsa.VCHUSUARIOMODIFICACION = tacsa.VCHUSUARIOMODIFICACION;
            tacsa.DTMFECHAMODIFICACION = tacsa.DTMFECHAMODIFICACION;
            contexto.SaveChanges();
        }


        static public List<Tacsa> listarTacsa(this FiltroTacsa filtroTacsa)
        {
            MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();

            DateTime desde = Funciones.StringToDate(filtroTacsa.FechaDesde);
            //DateTime desde = new DateTime(filtroDesdeDate.Year, filtroDesdeDate.Month, filtroDesdeDate.Day,0,0,0);

            DateTime filtroHastaDate = Funciones.StringToDate(filtroTacsa.FechaHasta);
            DateTime hasta = new DateTime(filtroHastaDate.Year, filtroHastaDate.Month, filtroHastaDate.Day, 23, 59, 59);

            List<TACSA> listaHABLA_FACIL = contexto.TACSA.Where(t => t.DTMFECHA >= desde && 
                t.DTMFECHA <= hasta && t.CHRESTADO == Constantes.ESTADO_HABILITADO).ToList();
            List<Tacsa> listaTacsa = new List<Tacsa>();
            foreach (TACSA tacsa in listaHABLA_FACIL)
            {
                listaTacsa.Add(tacsa.toTacsa());
            }
            return listaTacsa;

        }

        static public Tacsa obtenerTacsa(this FiltroTacsa filtroTacsa)
        {
            MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();
            TACSA tacsa = contexto.TACSA.Where(t => 1==1 ).FirstOrDefault();
            return tacsa.toTacsa();
        }

        static public Tacsa obtenerTacsaMensualReproductor()
        {
            MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();
            TACSA tacsaUltimo = contexto.TACSA.Where(d => d.CHRESTADO == Constantes.ESTADO_HABILITADO).OrderByDescending(d=> d.DTMFECHA).FirstOrDefault();
            String mes = tacsaUltimo.DTMFECHA.Value.Month.ToString();
            String anio = tacsaUltimo.DTMFECHA.Value.Year.ToString();
            Tacsa tacsa = new Tacsa();
            
            using (EntityConnection econ = new EntityConnection("name=MILPO_VIDEOS_Entities"))
            {
                econ.Open();
                //"MONTH(TA.DTMFECHA) = (SELECT MONTH(T.DTMFECHA) AS MES FROM MILPO_VIDEOS_Entities.TACSA AS T ORDER BY T.DTMFECHA DESC LIMIT 1)" +
                EntityCommand ecom = econ.CreateCommand();
                String query = "SELECT SUM(TA.INTTACSA) AS SUMA,SUM(TA.INTTACA),SUM(TA.INTSEVERIDAD)" +
                " FROM MILPO_VIDEOS_Entities.TACSA AS TA WHERE TA.CHRESTADO = '" + Constantes.ESTADO_HABILITADO + "'"+
                " AND MONTH(TA.DTMFECHA) = " + mes + " AND YEAR(TA.DTMFECHA) = "+anio;
                ecom.CommandText = query;
                using (EntityDataReader rdr = ecom.ExecuteReader(System.Data.CommandBehavior.SequentialAccess | System.Data.CommandBehavior.CloseConnection))
                {
                    while (rdr.Read())
                    {
                        tacsa.INTTACSA = rdr.GetInt32(0);
                        tacsa.INTTACA = rdr.GetInt32(1);
                        tacsa.INTSEVERIDAD = rdr.GetInt32(2);
                        if (Convert.ToInt32(mes) < 10)
                            tacsa.Fecha = "01/0" + mes + "/" + anio + " 00:00:00";    
                        else
                            tacsa.Fecha = "01/" + mes + "/" + anio + " 00:00:00";
                        
                    }
                }
            }
            return tacsa;
        }

        static public Tacsa obtenerTacsaAnualReproductor()
        {
            MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();
            TACSA tacsaUltimo = contexto.TACSA.Where(d => d.CHRESTADO == Constantes.ESTADO_HABILITADO).OrderByDescending(d => d.DTMFECHA).FirstOrDefault();
            String anio = tacsaUltimo.DTMFECHA.Value.Year.ToString();
            Tacsa tacsa = new Tacsa();

            using (EntityConnection econ = new EntityConnection("name=MILPO_VIDEOS_Entities"))
            {
                econ.Open();
                //"MONTH(TA.DTMFECHA) = (SELECT MONTH(T.DTMFECHA) AS MES FROM MILPO_VIDEOS_Entities.TACSA AS T ORDER BY T.DTMFECHA DESC LIMIT 1)" +
                EntityCommand ecom = econ.CreateCommand();
                String query = "SELECT SUM(TA.INTTACSA) AS SUMA,SUM(TA.INTTACA),SUM(TA.INTSEVERIDAD)" +
                " FROM MILPO_VIDEOS_Entities.TACSA AS TA WHERE TA.CHRESTADO = '"+ Constantes.ESTADO_HABILITADO +"' AND YEAR(TA.DTMFECHA) = " + anio;
                ecom.CommandText = query;
                using (EntityDataReader rdr = ecom.ExecuteReader(System.Data.CommandBehavior.SequentialAccess | System.Data.CommandBehavior.CloseConnection))
                {
                    while (rdr.Read())
                    {
                        tacsa.INTTACSA = rdr.GetInt32(0);
                        tacsa.INTTACA = rdr.GetInt32(1);
                        tacsa.INTSEVERIDAD = rdr.GetInt32(2);
                        tacsa.Fecha = "01/01/" + anio + " 00:00:00";
                    }
                }
            }
            return tacsa;
        }

        
        
        
    }
}

